home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 1998 November / IRIX 6.5.2 Base Documentation November 1998.img / usr / share / catman / u_man / cat1 / rld.z / rld
Text File  |  1998-10-30  |  36KB  |  661 lines

  1.  
  2.  
  3.  
  4. RRRRLLLLDDDD((((1111))))                                                                  RRRRLLLLDDDD((((1111))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      rld - runtime linker
  10.      rld.debug - runtime linker with debugging support
  11.  
  12. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  13.      _r_l_d, the runtime linker, exists in appropriate versions for executables
  14.      in each ABI (Application Binary Interface) available.  _r_l_d is invoked
  15.      when running a dynamic executable. _r_l_d maps in shared objects used by
  16.      this executable, resolves relocations as _l_d does at static link time, and
  17.      allocates common if required.
  18.  
  19.      When any dynamic executable is run, the system will first run an
  20.      interpreter which is responsible for collecting together the appropriate
  21.      objects, mapping them into memory and resolving references during
  22.      runtime. The name of the interpreter is included in the executable file.
  23.      Dynamic execution is only supported with ELF format executables. Such
  24.      executables will have an INTERP section which specifies the name of this
  25.      interpreter.  The default name of this interpreter is /_u_s_r/_l_i_b/_l_i_b_c._s_o._1.
  26.      Any binary which hopes to conform to the MIPS SVR4 ABI should use the
  27.      name /_u_s_r/_l_i_b/_l_i_b_c._s_o._1 as its interpreter.
  28.  
  29.      For 64-bit (64-bit ABI) programs the name of this interpreter is
  30.      /_u_s_r/_l_i_b_6_4/_l_i_b_c._s_o._1.  The discussion below applies to 64-bit programs if
  31.      the directory /_u_s_r/_l_i_b_6_4 is substituted for the directory  /_u_s_r/_l_i_b and
  32.      the directory /_l_i_b_6_4 is substituted for /_l_i_b.
  33.  
  34.      For new 32-bit ABI programs the name of this interpreter is
  35.      /_u_s_r/_l_i_b_3_2/_l_i_b_c._s_o._1.  The discussion below applies to new 32-bit ABI
  36.      programs if the directory /_u_s_r/_l_i_b_3_2 is substituted for the directory
  37.      /_u_s_r/_l_i_b and the directory /_l_i_b_3_2 is substituted for /_l_i_b.
  38.  
  39.      The file /_u_s_r/_l_i_b/_l_i_b_c._s_o._1 is the standard C/system library in the form
  40.      of a shared object. In addition /_u_s_r/_l_i_b/_l_i_b_c._s_o._1 contains code which
  41.      will load the interpreter into its address space and set it to work.  The
  42.      default such interpreter is /_l_i_b/_r_l_d.
  43.  
  44.      One of the primary features of dynamic linking is that it gives users the
  45.      ability to change library implementations without recompiling the
  46.      executable. Some mechanisms for this are listed below.  However,
  47.      /_u_s_r/_l_i_b/_l_i_b_c._s_o._1 is not subject to any of the mechanisms listed below,
  48.      since it is known to the executable as the interpreter as well as a
  49.      needed shared object. If you wish to substitute /_u_s_r/_l_i_b/_l_i_b_c._s_o._1, the
  50.      best way is to make use of the -_I flag to the linker (_l_d(1)).  This can
  51.      be passed from the compiler driver using the -_W_l,-_I,_m_y_i_n_t_e_r_p_n_a_m_e format.
  52.      However, any such shared object specified must be able to act as
  53.      interpreter (or invoke _r_l_d).
  54.  
  55.      _r_l_d constructs an explicit shared object list based on the information
  56.      listed in the .liblist section.  For 32-bit programs, if the environment
  57.      variable ____RRRRLLLLDDDD____LLLLIIIISSSSTTTT is set, it overrides the dynamic executable's original
  58.      list (after the original list is constructed).  The corresponding
  59.      environment variable for 64-bit programs is ____RRRRLLLLDDDD66664444____LLLLIIIISSSSTTTT,,,, and the one for
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. RRRRLLLLDDDD((((1111))))                                                                  RRRRLLLLDDDD((((1111))))
  71.  
  72.  
  73.  
  74.      new 32-bit ABI programs is ____RRRRLLLLDDDDNNNN33332222____LLLLIIIISSSSTTTT....
  75.  
  76.      For n32 (new 32-bit ABI) or 64-bit (64-bit ABI) programs, if _RLDN32_LIST
  77.      or _RLD64_LIST is not specified, then rld will honor _RLD_LIST if
  78.      specified.
  79.  
  80.      The user may include DDDDEEEEFFFFAAAAUUUULLLLTTTT in _RLD_LIST (_RLDN32_LIST/_RLD64_LIST) to
  81.      include the executable's original objlist and have rld to add new shared
  82.      objects just before and/or after it.  The object list is specified as a
  83.      colon (:) separated list of shared objects.  The liblists of shared
  84.      objects newly added from _RLD_LIST, _RLDN32_LIST, or _RLD64_LIST are
  85.      intentionally not processed:  so it is up to the user to make the list
  86.      complete.
  87.  
  88.      Because there are three distinct ABI's used by Irix programs with
  89.      accompanying libraries, there are three distinct sets of RLD search paths
  90.      and three sets of environment variables.
  91.  
  92.      The default library search path for o32 (32-bit ABI) programs is
  93.      (/_u_s_r/_l_i_b:/_u_s_r/_l_i_b/_i_n_t_e_r_n_a_l:/_l_i_b), which can be overridden by either of
  94.      the environment variables ____RRRRLLLLDDDD____RRRROOOOOOOOTTTT or LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY____PPPPAAAATTTTHHHH....
  95.  
  96.      The default library search path for 64 (64-bit ABI) programs is
  97.      (/_u_s_r/_l_i_b_6_4:/_u_s_r/_l_i_b_6_4/_i_n_t_e_r_n_a_l:/_l_i_b_6_4), which can be overridden by
  98.      either of the environment variables ____RRRRLLLLDDDD66664444____RRRROOOOOOOOTTTT or LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY66664444____PPPPAAAATTTTHHHH....
  99.  
  100.      The default library search path for n32 (new 32-bit ABI) programs is
  101.      (/_u_s_r/_l_i_b_3_2:/_u_s_r/_l_i_b_3_2/_i_n_t_e_r_n_a_l:/_l_i_b_3_2), which can be overridden by
  102.      either of the environment variables ____RRRRLLLLDDDDNNNN33332222____RRRROOOOOOOOTTTT or LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYYNNNN33332222____PPPPAAAATTTTHHHH....
  103.  
  104.      For n32 or 64-bit programs, if LD_LIBRARYN32_PATH or LD_LIBRARY64_PATH is
  105.      not specified, then rld will honor LD_LIBRARY_PATH if specified.  As a
  106.      result, if LD_LIBRARY_PATH is set for an o32 program it is a very good
  107.      idea to also set LD_LIBRARYN32_PATH and LD_LIBRARY64_PATH to something
  108.      ("" will suffice) to avoid having LD_LIBRARY_PATH apply accidentally to
  109.      n32 and 64 applications in that environment.
  110.  
  111.      The search path for shared objects is acquired in the following order:
  112.  
  113.      1.   The path of the shared object if given in the liblist,
  114.           (i.e., if the _s_o_n_a_m_e of the shared object has a path (see _l_d(1));
  115.  
  116.      2.   DT_RPATH if DT_RPATH is defined in the executable or
  117.           any DSO that _r_l_d has opened.
  118.  
  119.      3.   Use LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY____PPPPAAAATTTTHHHH if defined in the environment at
  120.           the time of execution;
  121.  
  122.      4.   The default library search path.
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. RRRRLLLLDDDD((((1111))))                                                                  RRRRLLLLDDDD((((1111))))
  137.  
  138.  
  139.  
  140.      DDDDTTTT____RRRRPPPPAAAATTTTHHHH is a colon(:) separated list of directories.  DDDDTTTT____RRRRPPPPAAAATTTTHHHH in the
  141.      library search algorithm outlined above refers to the net list of paths
  142.      at the time the search is done.  DDDDTTTT____RRRRPPPPAAAATTTTHHHH is actually a tag in the
  143.      ._d_y_n_a_m_i_c section of a DSO or executable whose value is a string.
  144.      DDDDTTTT____RRRRPPPPAAAATTTTHHHH is set in any given DSO or the executable via the ----rrrrppppaaaatttthhhh switch
  145.      to _l_d(1) when the executable or DSO is created.  Each DDDDTTTT____RRRRPPPPAAAATTTTHHHH appends to
  146.      the list of directories at the time the executable or DSO is loaded.
  147.      There is no mechanism to remove anything from the list of directories
  148.      which rrrrlllldddd builds for the executable.
  149.  
  150.      LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY____PPPPAAAATTTTHHHH is a colon(:) separated list of directories; and, if
  151.      defined, specifies an extra set of directories in which rld is to look
  152.      when searching for shared objects.
  153.  
  154.      LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYY66664444____PPPPAAAATTTTHHHH and LLLLDDDD____LLLLIIIIBBBBRRRRAAAARRRRYYYYNNNN33332222____PPPPAAAATTTTHHHH are treated in a similar
  155.      fashion.
  156.  
  157.      ____RRRRLLLLDDDD____RRRROOOOOOOOTTTT is a colon(:) separated list of directories; and, if defined,
  158.      is appended to the front of DT_RPATH and the default path.
  159.  
  160.      ____RRRRLLLLDDDD66664444____RRRROOOOOOOOTTTT and ____RRRRLLLLDDDDNNNN33332222____RRRROOOOOOOOTTTT are treated in a similar fashion.
  161.  
  162.      To ensure compatibility, applications may choose to disallow exec-time or
  163.      runtime library replacement.  _l_d supports the -_n_o__l_i_b_r_a_r_y__r_e_p_l_a_c_e_m_e_n_t,
  164.      flag to facilitate this feature.
  165.  
  166.      Security dictates that _r_l_d should not allow library replacement for
  167.      _s_e_t_u_i_d and _s_e_t_g_i_d programs unless the user is _r_o_o_t.
  168.  
  169.      Users can replace the default _r_l_d binary by setting the environment
  170.      variable ____RRRRLLLLDDDD____PPPPAAAATTTTHHHH to the full path of another runtime linker.  _r_l_d._d_e_b_u_g
  171.      is a version of _r_l_d that has debugging support.  By setting the
  172.      environment variable ____RRRRLLLLDDDD____PPPPAAAATTTTHHHH to /usr/lib/rld.debug, it replaces the
  173.      default _r_l_d as the runtime linker, and the debugging features it supports
  174.      are available.
  175.  
  176.      For 64-bit programs, the environment variable is ____RRRRLLLLDDDD66664444____PPPPAAAATTTTHHHH and the
  177.      debugging version of rld is /usr/lib64/rld.debug.
  178.  
  179.      For new 32-bit ABI programs, the environment variable is ____RRRRLLLLDDDDNNNN33332222____PPPPAAAATTTTHHHH and
  180.      the debugging version of rld is /usr/lib32/rld.debug.
  181.  
  182.      rrrrlllldddd also supports the environment variable LLLLDDDD____BBBBIIIINNNNDDDD____NNNNOOOOWWWW as documented in
  183.      the SYSTEM V ABI pg 5-14. If LLLLDDDD____BBBBIIIINNNNDDDD____NNNNOOOOWWWW is set to "1" or "on", then the
  184.      dynamic linker processes all relocation before transferring control to
  185.      the program, if LLLLDDDD____BBBBIIIINNNNDDDD____NNNNOOOOWWWW is set to "0" or "off", or does not occur in
  186.      the environment, then the dynamic linker is permitted to perform symbol
  187.      resolution and relocation for functions lazily, ie avoid them until the
  188.      functions are called.
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. RRRRLLLLDDDD((((1111))))                                                                  RRRRLLLLDDDD((((1111))))
  203.  
  204.  
  205.  
  206.      RRRRuuuunnnnttttiiiimmmmeeee lllliiiinnnnkkkkiiiinnnngggg iiiinnnntttteeeerrrrffffaaaacccceeee
  207.  
  208.      The system calls _d_l_o_p_e_n(3), _d_l_s_y_m(3), _d_l_c_l_o_s_e(3), _d_l_e_r_r(3)
  209.      _s_g_i_d_l_o_p_e_n__v_e_r_s_i_o_n(3) and _s_g_i_d_l_a_d_d(3) are provided to supply users with
  210.      on-demand loading of objects.  These routines are found in
  211.      /_u_s_r/_l_i_b/_l_i_b_c._s_o._1; no special flags are needed at link time to access
  212.      them.
  213.  
  214.      _r_l_d ooooppppttttiiiioooonnnnssss
  215.  
  216.      Users may specify runtime linker options by setting the ____RRRRLLLLDDDD____AAAARRRRGGGGSSSS
  217.      environment variable to any combination of the following options.  rrrrlllldddd
  218.      options are not needed to run properly coded and linked executables: they
  219.      are provided for special situations and debugging.
  220.  
  221.      ----cccclllleeeeaaaarrrrssssttttaaaacccckkkk
  222.           For programs that assume local variables to be initialized to zero
  223.           upon function entry, this option forces _r_l_d to zero any stack it
  224.           uses before before calling the program's main program.  Properly
  225.           written programs never assume that the stack is zeroed (therefore
  226.           properly written programs do not expect local variables to be
  227.           automatically initialized except as provided for in the
  228.           programming-language definition).  If a program or any of its DSOs
  229.           (as seen at startup of the program) dynamic section flags do not
  230.           have RHF_SGI_ONLY set then ----cccclllleeeeaaaarrrrssssttttaaaacccckkkk is automatically turned on.
  231.  
  232.      ----iiiiggggnnnnoooorrrreeee____aaaallllllll____vvvveeeerrrrssssiiiioooonnnnssss
  233.           ignore versions on all objects.
  234.  
  235.      ----iiiiggggnnnnoooorrrreeee____vvvveeeerrrrssssiiiioooonnnnshared_object
  236.           ignore the version stamp checking on the object specified.  This
  237.           option can be specified multiple times (in case multiple shared
  238.           objects should have their versions ignored).
  239.  
  240.      ----iiiiggggnnnnoooorrrreeee____uuuunnnnrrrreeeessssoooollllvvvveeeedddd
  241.           doesn't complain or abort when _r_l_d can't resolve unresolved data
  242.           symbols.
  243.  
  244.      ----lllloooogggg   ffffiiiilllleeee
  245.           prints all messages to _f_i_l_e instead of the default action of
  246.           printing all messages to the device ////ddddeeeevvvv////ttttttttyyyy  (if ////ddddeeeevvvv////ttttttttyyyy is
  247.           unavailable, the system log (/_v_a_r/_a_d_m/_S_Y_S_L_O_G) is used instead).
  248.  
  249.      _r_l_d._d_e_b_u_g ooooppppttttiiiioooonnnnssss
  250.  
  251.      The following additional options are available when the appropriate
  252.      _RLD_PATH environment variable is set appropriately to /usr/lib/rld.debug
  253.      (for n32, _RLDN32_PATH to /usr/lib32/rld.debug.  for 64, _RLD64_PATH to
  254.      /usr/lib64/rld.debug).
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. RRRRLLLLDDDD((((1111))))                                                                  RRRRLLLLDDDD((((1111))))
  269.  
  270.  
  271.  
  272.      ----qqqquuuuiiiicccckkkkssssttttaaaarrrrtttt____iiiinnnnffffoooo
  273.           Tells user whether quickstart has failed.
  274.  
  275.      ----iiiinnnntttteeeerrrraaaacccctttt
  276.           _r_l_d interactively prompts the user on stdin to fix problems in the
  277.           link (e.g. _r_l_d will ask the user to provide a full pathname for a
  278.           missing shared object.)
  279.  
  280.      ----ttttrrrraaaacccceeee
  281.           generally shows the flow of code in _r_l_d itself and prints individual
  282.           symbol actions.
  283.  
  284.      ----vvvv   generally prints _r_l_d actions at the level of the DSO, not at the
  285.           symbol level.  ----vvvv is less verbose than ----ttttrrrraaaacccceeee.
  286.  
  287.      ----ddddeeeebbbbuuuugggg ssssyyyymmmmbbbboooollll
  288.           prints a verbose description of the actions taken resolving all
  289.           symbols(the option is those two literal words: there is no provision
  290.           for tracing the actions on only selected symbols).  This produces
  291.           lots of output so it is normally most useful to also use ----lllloooogggg ffffiiiilllleeee
  292.           to direct the _r_l_d output to _f_i_l_e.
  293.  
  294.      RRRRuuuunnnnttttiiiimmmmeeee lllliiiinnnnkkkkeeeerrrr eeeennnnttttrrrryyyy ppppooooiiiinnnnttttssss
  295.  
  296.      _r_l_d is entered when a program using dso is started via _e_x_e_c() and through
  297.      lazy text resolution during program execution. Before exiting, programs
  298.      or objects need to call __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__S_H_U_T__D_O_W_N) to ensure that the
  299.      program executes all of the code specified by -_f_i_n_i flag to _l_d(1).  The
  300.      __e_x_i_t(2) library routine calls __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__S_H_U_T__D_O_W_N).  Any call
  301.      to __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__S_H_U_T__D_O_W_N) runs the -_f_i_n_i code on all objects so
  302.      it cannot safely be done just anywhere!  As is mentioned below in this
  303.      document, __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__S_H_U_T__D_O_W_N) is not a call any application
  304.      should make: it is for the system developers only.
  305.  
  306.      SSSSyyyysssstttteeeemmmm ddddeeeevvvveeeellllooooppppeeeerrrr''''ssss iiiinnnntttteeeerrrrffffaaaacccceeee
  307.  
  308.      _r_l_d keeps a doubly linked list of structures and crt1.o contains a
  309.      pointer to the head of the list of obj structures called ___r_l_d__o_b_j__h_e_a_d .
  310.      In an o32 executable, this points to a linked list of objList structures
  311.      (/usr/include/obj_list.h).  each of which has a 'data' element which is a
  312.      pointer to a 'struct obj' (/usr/include/obj.h) (even though the field is
  313.      not declared as a pointer).  In an n32 executable, ___r_l_d__o_b_j__h_e_a_d points
  314.      to a linked list of Elf32_Obj_Info structures (/usr/include/objlist.h).
  315.      In a 64-bit executable, ___r_l_d__o_b_j__h_e_a_d points to a linked list of
  316.      Elf64_Obj_Info structures (/usr/include/objlist.h).  The 'oi_magic'
  317.      element of each Elf32_Obj_Info or Elf64_Obj_Info is all-bits-on
  318.      (0xffffffff) to make it easier to determine which list type is in use a
  319.      32-bit executable.
  320.  
  321.      UUUUsssseeeerrrr eeeennnnttttrrrryyyy ppppooooiiiinnnnttttssss
  322.  
  323.  
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. RRRRLLLLDDDD((((1111))))                                                                  RRRRLLLLDDDD((((1111))))
  335.  
  336.  
  337.  
  338.      The interface described below is for system development only.  It is not
  339.      recommended nor supported for use in end-user code.  It is described here
  340.      for the benefit of system developers.
  341.  
  342.      #_i_n_c_l_u_d_e <_r_l_d__i_n_t_e_r_f_a_c_e._h>
  343.      _v_o_i_d *__r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(_E_l_f_3_2__W_o_r_d _o_p_e_r_a_t_i_o_n, ...)
  344.  
  345.      Here is a list of currently defined operations:
  346.  
  347.      (_i_n_t)__r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__S_H_U_T__D_O_W_N)
  348.  
  349.           This function calls the routine specified by the -_f_i_n_i flag to _l_d(1)
  350.           on all open DSOs (and the main program) in the reverse of the order
  351.           that the -_i_n_i_t sections were run.
  352.  
  353.      (_c_h_a_r *)__r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__F_I_R_S_T__P_A_T_H_N_A_M_E)
  354.  
  355.           This function returns the string "MAIN" and resets an internal
  356.           pointer inside of rld to set up for calls to This interface is not
  357.           thread-safe: multiple threads doing this will get erroneous results.
  358.           Any call to __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__M_O_D_I_F_Y__L_I_S_T,...)  after calling
  359.           __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__F_I_R_S_T__P_A_T_H_N_A_M_E) and before calling
  360.           __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__N_E_X_T__P_A_T_H_N_A_M_E) will interfere with the
  361.           correctness of the __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__N_E_X_T__P_A_T_H_N_A_M_E) returns.
  362.           __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__N_E_X_T__P_A_T_H_N_A_M_E). Any operation (including
  363.           delay-loading a DSO as a result of lazy-function-evaluation) that
  364.           causes the DSO list to be altered may interfere with the correctness
  365.           of the __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__N_E_X_T__P_A_T_H_N_A_M_E) returns.
  366.  
  367.      (_c_h_a_r *)__r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__N_E_X_T__P_A_T_H_N_A_M_E)
  368.  
  369.           This function returns the next pathname in _r_l_d's object list and
  370.           increments its internal pointer. It returns NULL when rld reaches
  371.           the end of the list.  This interface is not thread-safe: multiple
  372.           threads doing this will get erroneous results.  Calls to
  373.           __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__N_E_X_T__P_A_T_H_N_A_M_E) cannot be interspersed with
  374.           calls to __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__M_O_D_I_F_Y__L_I_S_T,...  as doing so will
  375.           interfere with the correctness of the
  376.           __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__N_E_X_T__P_A_T_H_N_A_M_E) returns.  Any operation
  377.           (including delay-loading a DSO as a result of lazy-function-
  378.           evaluation) that causes the DSO list to be altered may interfere
  379.           with the correctness of the __r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__N_E_X_T__P_A_T_H_N_A_M_E)
  380.           returns.
  381.  
  382.      (_c_h_a_r *)__r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__M_O_D_I_F_Y__L_I_S_T, _E_l_f_3_2__W_o_r_d _o_p_e_r_a_t_i_o_n, _c_h_a_r
  383.      *_o_r_i_g_i_n_a_l__p_a_t_h_n_a_m_e, _c_h_a_r *_n_a_m_e)
  384.  
  385.           This function allows users to link and unlink objects.  When users
  386.           insert or add an object, they must specify the new object in _n_a_m_e.
  387.           They may specify a full path or take advantage of _r_l_d's searching
  388.           mechanism. Users are not allowed to insert before MAIN. If
  389.           _o_r_i_g__p_a_t_h_n_a_m_e is zero, _r_l_d will operate on the last element in the
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. RRRRLLLLDDDD((((1111))))                                                                  RRRRLLLLDDDD((((1111))))
  401.  
  402.  
  403.  
  404.           list.  The exact function performed depends on the parameter
  405.           _o_p_e_r_a_t_i_o_n, which can take the following values:
  406.  
  407.                __R_L_D__O_P__N_O_N_E does nothing.
  408.  
  409.                __R_L_D__O_P__I_N_S_E_R_T adds a new object specified by _n_a_m_e before the
  410.                object specified by _o_r_i_g__p_a_t_h_n_a_m_e. Objects cannot be added
  411.                before _m_a_i_n().
  412.  
  413.                __R_L_D__O_P__A_D_D adds a new object specified by _n_a_m_e after the
  414.                object specified by _o_r_i_g__p_a_t_h_n_a_m_e. If _o_r_i_g__p_a_t_h_n_a_m_e is omitted,
  415.                the new object will be added at the end of the object list.
  416.  
  417.                __R_L_D__O_P__D_E_L_E_T_E deletes _o_r_i_g__p_a_t_h_n_a_m_e from the object list.
  418.  
  419.                __R_L_D__O_P__R_E_P_L_A_C_E replaces _o_r_i_g__p_a_t_h_n_a_m_e with the object
  420.                specified by _n_a_m_e in the object list.
  421.  
  422.      (_c_h_a_r *)__r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__A_D_D_R__T_O__N_A_M_E, _E_l_f_3_2__A_d_d_r _a_d_d_r_e_s_s)
  423.  
  424.           This function returns the symbol name of the address passed in as
  425.           argument, NULL if no symbol corresponds to that address in the
  426.           current process.  In a 64-bit application, the second argument is of
  427.           type Elf64_Addr.
  428.  
  429.      (_E_l_f_3_2__A_d_d_r)__r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__N_A_M_E__T_O__A_D_D_R, _c_h_a_r *_n_a_m_e)
  430.  
  431.           This function returns actual address of _n_a_m_e. It returns NULL if _r_l_d
  432.           cannot find the passed argument.  In a 64-bit application, the value
  433.           returned is of type _E_l_f_6_4__a_d_d_r).
  434.  
  435.  
  436.      (_c_h_a_r *)__r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__V_E_R_S_I_O_N__E_X_P_E_C_T_E_D, _c_h_a_r *_s_o_n_a_m_e)
  437.  
  438.           This function returns the version string in MAIN's liblist entry for
  439.           _s_o_n_a_m_e.
  440.  
  441.      (_E_l_f_3_2__A_d_d_r)__r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__S_P_R_O_C__N_O_T_I_F_Y)
  442.  
  443.           This function signals to rld that sproc has been called and that rld
  444.           has to worry about multiple sproc threads.  The call is made by
  445.           _l_i_b_c._s_o.
  446.  
  447.      (_E_l_f_3_2__A_d_d_r)__r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__S_H_U_T_D_O_W_N__T_H_R_E_A_D)
  448.  
  449.           This function was intended to signal to rld that a thread is trying
  450.           to exit.  Currently does nothing.
  451.  
  452.      (_E_l_f_3_2__A_d_d_r)__r_l_d__n_e_w__i_n_t_e_r_f_a_c_e(__R_L_D__S_P_R_O_C__F_I_N_I)
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.                                                                         PPPPaaaaggggeeee 7777
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. RRRRLLLLDDDD((((1111))))                                                                  RRRRLLLLDDDD((((1111))))
  467.  
  468.  
  469.  
  470.           This function signals to rld that multiple _s_p_r_o_c(2) threads support
  471.           can be turned off.  It is called on behalf of, and in, the child
  472.           process after a _f_o_r_k(2) by the _f_o_r_k code in _l_i_b_c._s_o.
  473.  
  474. EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS
  475.      Here are some csh aliases for control of rld tracing that you may find
  476.      useful.  Notice that there are three sets of tracing aliases, one for
  477.      each ABI (o32, n32, 64).  See _f_i_l_e(_1) for how to identify the ABI of a
  478.      particular executable.
  479.  
  480.           #  trace o32 rld issues
  481.              alias ra     \
  482.                 'setenv _RLD_PATH /usr/lib/rld.debug       ;'\
  483.                 'setenv _RLD_ARGS "\!*"                    ;'
  484.              alias nora   \
  485.                 'unsetenv _RLD_ARGS                        ;'\
  486.                 'setenv _RLD_PATH /lib/rld                 ;'
  487.  
  488.           #  trace n32 rld issues
  489.              alias ra32   \
  490.                 'setenv _RLDN32_PATH /usr/lib32/rld.debug  ;'\
  491.                 'setenv _RLD_ARGS "\!*"                    ;'
  492.              alias nora32 \
  493.                 'unsetenv _RLD_ARGS                        ;'\
  494.                 'setenv _RLDN32_PATH /lib32/rld            ;'
  495.  
  496.           #  trace 64 rld issues
  497.              alias ra64   \
  498.                 'setenv _RLD64_PATH /usr/lib64/rld.debug   ;'\
  499.                 'setenv _RLD_ARGS "\!*"                    ;'
  500.              alias nora64 \
  501.                 'unsetenv _RLD_ARGS                        ;'\
  502.                 'setenv _RLD64_PATH /lib64/rld             ;'
  503.  
  504.      WWWWaaaattttcccchhhh RRRRLLLLDDDD wwwwhhhheeeennnn rrrruuuunnnnnnnniiiinnnngggg aaaannnn oooo33332222 bbbbiiiinnnnaaaarrrryyyy:::: ''''llllssss''''
  505.  
  506.           % ra -trace             <-- turns on tracing of o32 rld
  507.           % ls
  508.           27312:[rld] Entering RLD through MAIN
  509.           27312:ls: [rld] mapped ls at 0x400000
  510.           27312:ls: [rld] mapped /lib/libc.so.1 at 0xfa00000
  511.           27312:ls: [rld] found _end in ls for libc.so.1 at 0x10007000
  512.           27312:ls: [rld] number of objs in the objlist is 2
  513.           27312:ls: [rld] Exiting RLD through MAIN
  514.           RCS           libX11.so.2   libc.so       libl.a        setup
  515.           acrt1.o       libXaw.a      libc.so.1     libm.a        sgicc.cfg
  516.           crt1.o        libXext.a     libc.so.O     libmld.a      sgild.cfg
  517.  
  518.           % nora                  <-- turns off all o32 rld debugging options.
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.                                                                         PPPPaaaaggggeeee 8888
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532. RRRRLLLLDDDD((((1111))))                                                                  RRRRLLLLDDDD((((1111))))
  533.  
  534.  
  535.  
  536.      WWWWaaaattttcccchhhh RRRRLLLLDDDD wwwwhhhheeeennnn rrrruuuunnnnnnnniiiinnnngggg aaaannnn nnnn33332222 bbbbiiiinnnnaaaarrrryyyy:::: ''''cccciiii''''
  537.  
  538.           % ra32 -v               <-- turns on verbose mode in n32 rld
  539.           % ci -l c.c
  540.           14891:_RLD_ARGS = "-v"
  541.           14891:_RLD_ROOT = /
  542.           14891:LD_LIBRARYN32_PATH = none
  543.           14891:ci: mapped ci at 0x10000000
  544.           14891:ci: mapped /usr/lib32/libc.so.1 at 0xfa00000
  545.           RCS/c.c,v  <--  c.c
  546.           file is unchanged; reverting to previous revision 1.1
  547.           done
  548.  
  549.           % nora32                <-- turns off all n32 rld debugging options.
  550.  
  551. EEEERRRRRRRROOOORRRR RRRREEEEPPPPOOOORRRRTTTTIIIINNNNGGGG
  552.      Most error messages are written to /_d_e_v/_t_t_y, unless otherwise noted
  553.      above.  If _r_l_d should encounter an error condition for a process which
  554.      does not have a valid /_d_e_v/_t_t_y attached, it will write the messages to
  555.      /_v_a_r/_a_d_m/_S_Y_S_L_O_G instead.  (The system log is written via calls to
  556.      _s_y_s_l_o_g(2).)
  557.  
  558.  
  559. CCCCHHHHAAAANNNNGGGGIIIINNNNGGGG RRRROOOOOOOOTTTT
  560.      A copy of the device /_d_e_v/_z_e_r_o is essential to the operation of _r_l_d.
  561.      Thus in most uses of _c_h_r_o_o_t(1), it will be necessary to put a copy of
  562.      /_d_e_v/_z_e_r_o in the newly-created root.
  563.  
  564.  
  565. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  566.      _l_d(1), _c_c(1), _d_l_o_p_e_n(3), _d_l_c_l_o_s_e(3), _d_l_s_y_m(3), _d_l_e_r_r_o_r(3), _s_g_i_d_l_a_d_d(3),
  567.      _s_g_i_d_l_o_p_e_n__v_e_r_s_i_o_n(3), _s_g_i_g_e_t_d_s_o_v_e_r_s_i_o_n(3), _d_s_o(5), _g_p__o_v_e_r_f_l_o_w(5)
  568.  
  569.      Also see "System V Application Binary Interface" and "System V
  570.      Application Binary Interface: MIPS Processor Supplement" and "MIPSpro N32
  571.      ABI Handbook"
  572.  
  573. NNNNOOOOTTTTEEEESSSS
  574.      Listing a particular DSO in ____RRRRLLLLDDDD____LLLLIIIISSSSTTTT is likely to lead to problems and
  575.      failures unless all three environment variables are set.  A typical
  576.      result is a message like "... rld: Fatal Error: Cannot Successfully map
  577.      soname ...".  For example, consider a test app "a.out" which is o32 and a
  578.      specific o32 DSO, /tmp/mydso.so:
  579.          unsetenv _RLDN32_LIST _RLD64_LIST
  580.          setenv _RLD_LIST "/tmp/mydso.so:DEFAULT"
  581.      This will likely fail because some command (or the app itself) will
  582.      attempt to fork/exec some n32 application and /tmp/mydso.so is o32, not
  583.      n32.  ____RRRRLLLLDDDDNNNN33332222____LLLLIIIISSSSTTTT and ____RRRRLLLLDDDD66664444____LLLLIIIISSSSTTTT don't suffer from this as they are
  584.      only interpreted in a single ABI each. See the description of ____RRRRLLLLDDDD____LLLLIIIISSSSTTTT
  585.      earlier in this man page.  Adding
  586.          setenv _RLDN32_LIST DEFAULT
  587.          setenv _RLD64_LIST DEFAULT
  588.  
  589.  
  590.  
  591.                                                                         PPPPaaaaggggeeee 9999
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598. RRRRLLLLDDDD((((1111))))                                                                  RRRRLLLLDDDD((((1111))))
  599.  
  600.  
  601.  
  602.      will fix the problem in this example.
  603.  
  604. DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
  605.      Here we explain a message from rld whose meaning is not apparent.
  606.  
  607.      The aggregate IEEE exceptions required (OEX_FPU_MIN) (0xnn) not as
  608.      complete as the aggregate IEEE exceptions permitted
  609.      (OEX_FPU_MAX>>8)(0xnn).
  610.  
  611.          As the executable and each DSO is accessed (before the app begins
  612.          running) the .MIPS.options section (visible with _e_l_f_d_u_m_p -_o_p) is used
  613.          to compute an aggregate set of floating point exceptions to enable.
  614.          For example, use of the ----ttttrrrraaaappppuuuuvvvv flag to the compiler results in a
  615.          request for invalid exception trapping be enabled.  Whereas use of
  616.          certain high optimizations for -mips4 and -mips3 require that those
  617.          exceptions be turned off so that speculative loads of floating-point
  618.          values can be executed silently.  See compiler options
  619.          -TARG:exc_max=[I][U][O][Z][V], -TARG:exc_min=[I][U][O][Z][V], and
  620.          -TENV:X=0..5.
  621.  
  622.          Delay-loaded DSOs and dlopen()'d and sgidladd()ed DSOs are not
  623.          factored in till the actual sgidladd/dlopen is called.  The
  624.          OEX_FPU_MIN field of each object is OR'd with the others.  The non-
  625.          zero bits represent the set of floating point exceptions that the app
  626.          wants to catch (more precisely exceptions that some part of the app
  627.          or a DSO want to catch).  The OR'd-together OEX_FPU_MIN fields are
  628.          used to determine what set_fpc_csr() fields to set to 1 ( rrrrlllldddd never
  629.          sets any set_fpc_csr() fields to zero).  The OEX_FPU_MAX field of
  630.          each object is AND'd with the others.  The zero-bits represent
  631.          floating-point exceptions that must not be caught (for example, if
  632.          the code generator is issuing speculative loads, the invalid-value
  633.          exception should not be caught).  If some bits are OFF in OEX_FPU_MAX
  634.          that are ON in OEX_FPU_MIN that represents an impossible scenario:
  635.          exceptions must be caught and simultaneously must not be.  For
  636.          example, this could happen if object is compiled requesting trapping
  637.          uninitialized variables and requesting requesting a high optimization
  638.          resulting in the code generator issuing speculative loads.
  639.  
  640.          As each DSO is dlopen()ed or delay-loaded or sgidladd()ed or
  641.          dlclose()ed these flags are recalculated.  If user or library code
  642.          has changed the 5 exception-flag-enable fields from a previous
  643.          setting by rrrrlllldddd then rrrrlllldddd updating of the exception-enable fields
  644.          silently ceases for this execution.
  645.  
  646.          rrrrlllldddd never turns off exception-enable flags once it has turned them
  647.          on.
  648.  
  649.          Use eeeellllffffdddduuuummmmpppp ----oooopppp <<<<oooobbbbjjjjeeeeccccttttnnnnaaaammmmeeee>>>> to see the OEX fields of an executable
  650.          or DSO.
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.                                                                        PPPPaaaaggggeeee 11110000
  658.  
  659.  
  660.  
  661.